import { resolve } from 'path'
import { loadEnv } from 'vite'
import type { UserConfig, ConfigEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'

// 当前执行node命令时文件夹的地址（工作目录）
const root = process.cwd()

// 路径查找
function pathResolve(dir: string) {
	return resolve(root, '.', dir)
}

// 参考：https://cn.vitejs.dev/config/
export default ({ command, mode }: ConfigEnv): UserConfig => {
	let env = {} as any
	const isBuild = command === 'build'
	if (!isBuild) {
		env = loadEnv((process.argv[3] === '--mode' ? process.argv[4] : process.argv[3]), root)
	} else {
		env = loadEnv(mode, root)
	}
	return {
		base: env.VITE_BASE_PATH,
		root: root,
		// 服务端渲染
		server: {
			// 是否开启 https
			https: false,
			// 端口号
			port: env.VITE_PORT,
			host: "0.0.0.0",
			open: env.VITE_OPEN,
			// 本地跨域代理
			proxy: {
				['/dev-api']: {
					target: env.VITE_BASE_URL,
					ws: false,
					changeOrigin: true,
					rewrite: (path) => path.replace(new RegExp(`^/dev-api`), ''),
				},
			},
		},
		plugins: [
			vue(),
			createSvgIconsPlugin({
				iconDirs: [resolve(__dirname, 'src/icons/svg')],
				symbolId: 'icon-[dir]-[name]'
			})
		],
		resolve: {
			extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.less', '.css'],
			alias: [
				{
					find: /\@\//,
					replacement: `${pathResolve('src')}/`
				}
			]
		},
		build: {
			minify: 'terser',
			outDir: env.VITE_OUT_DIR || 'dist',
			sourcemap: env.VITE_SOURCEMAP === 'true' ? 'inline' : false,
			// brotliSize: false,
			terserOptions: {
				compress: {
					drop_debugger: env.VITE_DROP_DEBUGGER === 'true',
					drop_console: env.VITE_DROP_CONSOLE === 'true'
				}
			}
		}
	}
}

